/**
 * Copyright (c) 2013-Now http://jeesite.com All rights reserved.
 */
package com.jeesite.modules.storage.service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.jeesite.common.lang.StringUtils;
import com.jeesite.modules.storage.dao.MemberDao;
import com.jeesite.modules.storage.entity.*;
import com.jeesite.modules.storage.util.WebUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jeesite.common.entity.Page;
import com.jeesite.common.service.CrudService;
import com.jeesite.modules.storage.dao.PlateItemDao;

/**
 * 模块项Service
 */
@Service
@Transactional(readOnly=true)
public class PlateItemService extends CrudService<PlateItemDao, PlateItem> {

	@Autowired
	private ActivityService activityService;

	@Autowired
	private RouteService routeService;

	@Autowired
	private GoodsService goodsService;

	@Autowired
	private PlateGoodsService plateGoodsService;

	@Autowired
	private MemberDao memberDao;

	/*
	* 处理联动
	* */
	void handleCascade(PlateItem entity){
		if(entity == null)
		{
			return;
		}
		entity.setActivity(StringUtils.isBlank(entity.getActivityId()) ? null : activityService.get(entity.getActivityId()));
		entity.setRoute(StringUtils.isBlank(entity.getRouteId()) ? null : routeService.get(entity.getRouteId()));
		entity.setGoods(StringUtils.isBlank(entity.getGoodsId()) ? null : goodsService.get(entity.getGoodsId()));
	}

	/**
	 * 获取单条数据
	 * @param plateItem
	 * @return
	 */
	@Override
	public PlateItem get(PlateItem plateItem) {
		PlateItem entity = super.get(plateItem);
		handleCascade(entity);
		PlateGoods filterPlateGoods = new PlateGoods();
		filterPlateGoods.setPlateId(entity.getPlateId());
		filterPlateGoods.setPlateItemId(entity.getId());
		List<PlateGoods> plateGoodsList = plateGoodsService.findList(filterPlateGoods);
		for (PlateGoods plateGoods : plateGoodsList){
			plateGoods.setGoods(goodsService.get(plateGoods.getGoodsId()));
		}
		entity.setGoodsList(plateGoodsList);
		return entity;
	}
	
	/**
	 * 查询分页数据
	 * @param plateItem 查询条件
	 * @param plateItem.page 分页对象
	 * @return
	 */
	@Override
	public Page<PlateItem> findPage(PlateItem plateItem) {
		if(StringUtils.isBlank(plateItem.getOrderBy())){
			plateItem.setOrderBy(" sort ASC");
		}
		Page<PlateItem> plateItemPage = super.findPage(plateItem);
		for (PlateItem item : plateItemPage.getList()){
			handleCascade(item);
		}
		return  plateItemPage;
	}
	
	/**
	 * 保存数据（插入或更新）
	 * @param plateItem
	 */
	@Override
	@Transactional(readOnly=false)
	public void save(PlateItem plateItem) {
		plateItem.setActivityId(plateItem.getType().equals("活动")?plateItem.getActivityId():null);
		plateItem.setRouteId(plateItem.getType().equals("栏目")?plateItem.getRouteId():null);
		plateItem.setGoodsId(plateItem.getType().equals("商品")?plateItem.getGoodsId():null);
		super.save(plateItem);

		PlateGoods filterPlateGoods = new PlateGoods();
		List<PlateGoods> plateGoods = plateGoodsService.findList(filterPlateGoods);
		for (PlateGoods item : plateGoods){
			plateGoodsService.delete(item);
		}

		Integer plateGoodsIndex = 1;
		for (PlateGoods item : plateItem.getGoodsList()){
			if (PlateGoods.STATUS_DELETE.equals(item.getStatus())){
				continue;
			}
			item.setSort(plateGoodsIndex ++);
			item.setPlateId(plateItem.getPlateId());
			item.setPlateItemId(plateItem.getId());
			item.setActivityId(plateItem.getActivityId());
			plateGoodsService.insert(item);
		}
	}
	
	/**
	 * 更新状态
	 * @param plateItem
	 */
	@Override
	@Transactional(readOnly=false)
	public void updateStatus(PlateItem plateItem) {
		super.updateStatus(plateItem);
	}
	
	/**
	 * 删除数据
	 * @param plateItem
	 */
	@Override
	@Transactional(readOnly=false)
	public void delete(PlateItem plateItem) {
		super.delete(plateItem);
	}

	/*
	* 获取商品价格Map
	* */
	public Map getGoodsMap(Goods goods){
		Map map = new HashMap();

		map.put("price",goods.getPrice());
		map.put("vipPrice",goods.getVipPrice());
		map.put("memberPrice",goods.getMemberPrice());
		map.put("agentPrice",goods.getAgentPrice());

		return map;
	}

	/*
	 * 获取商品价格Map
	 * */
	public Map getGoodsMap(Goods goods,String type){
		Map map = new HashMap();

		map.put("goodsId",goods.getId());
		map.put("thumbnail",goods.getThumbnail());
		map.put("name",goods.getName());
		map.put("sourcePrice",goods.getPrice());
		map.put("salePrice", WebUtil.getSalePrice(type,getGoodsMap(goods)));
		map.put("agentPrice",goods.getAgentPrice());

		return map;
	}

	/*
	* 获取推荐
	 * @param plateId 模块Id
	 * @param memberId 会员Id
	* */
	public List<Map> getRecommend(String plateId,String memberId){
		String type = memberDao.findTypeById(memberId);
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		PlateItem filterPlateItem = new PlateItem();
		filterPlateItem.setPlateId(plateId);
		List<PlateItem> plateItems = super.findList(filterPlateItem);
		List<Map> maps= new ArrayList<>();
		for (PlateItem plateItem : plateItems){
			Map plateItemPap = new HashMap();
			plateItemPap.put("thumbnail",plateItem.getThumbnail());
			plateItemPap.put("type",plateItem.getType());
			plateItemPap.put("activityId",plateItem.getActivityId());
			if(StringUtils.isNotBlank( plateItem.getActivityId())){
				Activity activity = activityService.get(plateItem.getActivityId());
				Map activityMap = new HashMap();
				if(activity != null){
					activityMap.put("activityId", activity.getId());
					activityMap.put("brandId", activity.getBrandId());
					activityMap.put("thumbnail", activity.getThumbnail());
					activityMap.put("startTime", simpleDateFormat.format(activity.getStartTime()));
					activityMap.put("endTime", simpleDateFormat.format(activity.getEndTime()));
				}
				plateItemPap.put("activity",activityMap);
			}
			plateItemPap.put("routeId",plateItem.getRouteId());
			if(StringUtils.isNotBlank( plateItem.getRouteId())){
				Route route = routeService.get(plateItem.getRouteId());
				Map routeMap = new HashMap();
				if(route!=null) {
					routeMap.put("code", route.getCode());
					routeMap.put("name", route.getName());
					routeMap.put("path", route.getPath());
				}
				plateItemPap.put("route",routeMap);
			}
			plateItemPap.put("goodsId",plateItem.getGoodsId());
			if(StringUtils.isNotBlank( plateItem.getGoodsId())){
				plateItemPap.put("goods",getGoodsMap(goodsService.get(plateItem.getGoodsId()),type));
			}
			PlateGoods filterPlateGoods = new PlateGoods();
			List<PlateGoods> plateGoodsList = plateGoodsService.findList(filterPlateGoods);
			List<Map> plateGoodsMaps = new ArrayList<>();
			for (PlateGoods plateGoods : plateGoodsList){
				plateGoodsMaps.add(getGoodsMap(goodsService.get(plateGoods.getGoodsId()),type));
			}
			plateItemPap.put("plateGoods",plateGoodsMaps);
			maps.add(plateItemPap);
		}
		return maps;
	}
}